package com.mimiwang.article.config;

import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import com.mimiwang.article.mp.ingector.MySqlInjector;
import com.mimiwang.article.mp.plugins.MyInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
@MapperScan("com.mimiwang.article.dao") //设置mapper接口的扫描包
public class MybatisPlusConfig {

    @Bean //配置分页插件
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }

    /*逻辑删除插件*/
//    @Bean
//    public ISqlInjector sqlInjector(){
//        return new LogicSqlInjector();
//    }

    @Bean  /*注入自定义的拦截器(插件)*/
    public MyInterceptor myInterceptor(){
        return new MyInterceptor();
    }

    /*开启这个会报错*/
    /*可用于阻断全表更新删除的操作*/
//     @Bean
//     public SqlExplainInterceptor sqlExplainInterceptor(){
//         SqlExplainInterceptor sqlExplainInterceptor = new SqlExplainInterceptor();
//         List<ISqlParser> sqlParserList = new ArrayList<>();
//         // 攻击 SQL 阻断解析器、加入解析链
//         sqlParserList.add(new BlockAttackSqlParser());  /*全表更新删除的阻断器*/
//         sqlExplainInterceptor.setSqlParserList(sqlParserList);
//         return sqlExplainInterceptor;
//     }

     /*
     * 注入自定义的sql注入器
     * */
    @Bean
    public MySqlInjector mySqlInjector(){
        return new MySqlInjector();
    }

    /*配置注入性能分析插件*/
    @Bean
    @Profile({"dev"}) /*此注解用于必须要在配置文件里面表名示dev开发环境，才能把该组件注册到容器里面*/
    public PerformanceInterceptor performanceInterceptor(){
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        /*在工作中不允许用户等待，就可以通过setMaxTime把执行时间长的sql语句全部揪出来*/
        performanceInterceptor.setMaxTime(1000);/* ms 设置sql执行的最大时间，如果超过了就不执行*/
        performanceInterceptor.setFormat(true);/*是否开启格式化sql语句，设置日志中sql语句的格式化*/
        return performanceInterceptor;

    }

    /*注入乐观锁插件*/
    /*使用乐观锁插件的时候，需要附上version*/
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }




}
